/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.util.List;
import setor.CadastroSetor;
import setor.RepositorioSetor;
import setor.Setor;
import setor.SetorNaoCadastradoException;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Administrador
 */
public class ControladorSetor {

    private RepositorioSetor objRepositorioSetor = null;

    public ControladorSetor(RepositorioSetor objRepositorioSetor) {
        this.objRepositorioSetor = objRepositorioSetor;
    }

    /**
     *
     * @param objRepositorioSetor
     * @throws ErroAcessoRepositorioException
     */
    public void Cadastrar(Setor objSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSetor objCadastroSetor = new CadastroSetor(this.objRepositorioSetor);

        if (objSetor.getDescricaoSetor().trim().length() == 0) 
            throw new CamposObrigatoriosException("Descrição Setor Não informada");

        // Salvando no banco
        objCadastroSetor.cadastrarAtualizar(objSetor);
    }

    /**
     * Metodo que ira cadastrar o Setor
     *
     * @param Setor objSetor
     * @return void
     */
    public void Atualizar(Setor objSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSetor objCadastroSetor = new CadastroSetor(this.objRepositorioSetor);
        
        // Casts Necessários
        int idSetor = (int) objSetor.getIdSetor();
        boolean statusSetor = (boolean) objSetor.getStatusSetor();
       
        // Validações
        if (objSetor.getDescricaoSetor().trim().length() == 0) 
            throw new CamposObrigatoriosException("Descrição Setor Não informada");
        
        if(idSetor == 0)
            throw new CamposObrigatoriosException("Identificador Setor Não informada");
        
        // Setando novamente os valores
        objSetor.setStatusSetor(statusSetor);
        
        // Salvando no banco
        objCadastroSetor.cadastrarAtualizar(objSetor);

    }

    /**
     * Metodo que ira produrar o Setor
     *
     * @param int idSetor
     * @return void
     */
    public Setor procurar(int idSetor) throws SetorNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroSetor objCadastroSetor = new CadastroSetor(this.objRepositorioSetor);
       // Realizando casts
       idSetor = (int) idSetor;
       // validando
       if(idSetor == 0) throw new CamposObrigatoriosException("Setor");

       // Salvando no banco
       return objCadastroSetor.procurar(idSetor);

    }

    /**
     * Metodo que ira verificar a existência do Setor
     *
     * @param int idSetor
     * @return void
     */
    public boolean existe(int idSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSetor objCadastroSetor = new CadastroSetor(this.objRepositorioSetor);
        
       // Realizando casts
       idSetor = (int) idSetor;
       // validando
        if(idSetor == 0) throw new CamposObrigatoriosException("Codigo Setor já existe.");

        // Salvando no banco
         return objCadastroSetor.existe(idSetor);
    }

    /**
     * Metodo que ira listar os Setors
     *
     * @return Collection
     */
    public List<Setor> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroSetor objCadastroSetor = new   CadastroSetor(this.objRepositorioSetor);

       return objCadastroSetor.listar(strComplemento);
    }

    /**
     * Método que ira remover o Setor do banco
     *
     * @param idSetor
     */
    public void remover(int idSetor) throws SetorNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroSetor objCadastroSetor = new CadastroSetor(objRepositorioSetor);
       
       // Realizando casts
       idSetor = (int) idSetor;
       // validando
        if(idSetor == 0) throw new CamposObrigatoriosException("Codigo Setor já existe.");
       
       objCadastroSetor.remover(idSetor);
    }
    
    /**
     * Metodo que ira listar o Setor
     *
     * @return Collection
     */
    public List<Setor> listarAtivos() throws Exception, ErroAcessoRepositorioException {
        CadastroSetor objCadastroSetor = new   CadastroSetor(this.objRepositorioSetor);

       return objCadastroSetor.listarAtivos();
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<Setor> procurarPorDescricaoPorEnderecoEstoque(String descricaoSetor, int idEnderecoEstoque) throws Exception, ErroAcessoRepositorioException {
        CadastroSetor objCadastroSetor = new   CadastroSetor(this.objRepositorioSetor);
        
        if(descricaoSetor.trim().length() == 0 && idEnderecoEstoque == 0) throw new CamposObrigatoriosException("Descrição Setor ou Endereço Estoque");
        
       return objCadastroSetor.procurarPorDescricaoPorEnderecoEstoque(descricaoSetor, idEnderecoEstoque);
    }
}